Computer systems communicate with each other over networks by establishing and using network connections using well known standards such as Ethernet. Typically, multiple entities or processes running on a system can each independently communicate over the network. To help enable efficient communication over multiple connections to a system, network ports are provided for the input and output of the system. For example, a system might include a network adapter interface card that includes one or more physical ports to the network.
Some computer systems allow multiple operating systems (OS's) to be running concurrently and independently. For example, some server systems from IBM Corporation run multiple operating systems by providing each operating system in its own partition on the server. For example, a Linux partition, an AIX partition, and a different Unix partition can be running simultaneously on a server. To allow all these OS partitions to communicate over the network, different methods can be used. In one method, an I/O hosting partition of the server must handle the communication needs of all of the partitions running on the system. This creates slower communications to the OS partitions, however, because the multiple partitions are bottlenecked in their I/O communications over a network though the single I/O hosting partition, e.g., each partition must forward and receive its data through the single I/O hosting partition that includes a packet forwarder that is connected to a single network adapter.
In another configuration, to allow faster communication, a network adapter and physical network port can be provided to each OS partition on the same machine. Thus, for example, each of five different OS partitions is provided with its own dedicated network adapter with a physical port. However, the expense of such a configuration can become excessive, especially when a larger number of OS partitions is being implemented.
Having multiple OS partitions running on a system also requires that information received by the system and sent by the system is routed to all appropriate network destinations, and that partitions are able to send to and receive information from other partitions running on the same server. Other OS partitions might be designated as a sole destination for a data packet, or could be included in a group of several destinations for a packet. For example, broadcast (BC) and multicast (MC) network functions over Ethernet networks allow multiple destinations to receive information sent by a particular system or partition. If one partition sends out broadcast information to all available destinations on the network, then all of the other OS partitions on the system need to receive the broadcast information.
In existing systems network traffic is provided to and from different OS partitions by using any of several available methods. In one method, layer 3 routing is performed though a router external to the server system, where all data packets are sent outside the system and back into the system to appropriate OS partitions. However, this can be inefficient due to the external path, which takes longer, and may not support all desired functionality, such as layer 2 protocol support. In another method, a full Ethernet switch can be embedded on a network adapter. The switch switches between different partitions as needed to provide packets to the appropriate destinations. However, this method is expensive, since the Ethernet switch is external to existing circuitry on the adapter, and also may require non-standard, custom features and functionality.
Another network communication issue for server systems involves queuing of data packets. Traditionally, a single queue is provided for storing data packets that are sent out from or received by an operating system, where a stack in the kernel of the operating system handles the packets in the queue. In some other systems, other types of queuing may be used. However, the existing queuing methods do not address the needs of a system having multiple partitions, or the possibility of having both user-space queues as well as OS kernel queues.
Accordingly, what is needed is an apparatus and method for efficiently and inexpensively communicating with operating system partitions and computer networks, including the use of multiple OS partitions on a computer system with a limited number of physical ports, configurable line speeds, an efficient way to assign resources, and different kinds of packet queues. The present invention addresses such a need.